home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / extra / pro13 / strncpy.c < prev    next >
Text File  |  1993-02-01  |  662b  |  33 lines

  1. /*
  2.     strncpy.C
  3.  
  4.     Copyright (C) 1993, Geoff Friesen B.Sc.
  5.     All rights reserved.
  6. */
  7.  
  8. #define    INCL_STRNCPY
  9.  
  10. char *strncpy (char *dest, const char *src, size_t maxlen)
  11. {
  12.    _ES = _DS;
  13.  
  14.    asm cld
  15.  
  16.    _SI = _DI = (unsigned) src;
  17.    _BX = _CX = (unsigned) maxlen;
  18.  
  19.    asm mov al, 0
  20.    asm repnz scasb;        /* search for null terminator */
  21.  
  22.    _BX -= _CX;            /* bx is actual length of string */
  23.    _DI = (unsigned) dest;
  24.  
  25.    asm xchg cx, bx        /* bx is number of nulls to pad */
  26.    asm repz movsb
  27.  
  28.    _CX = _BX;            /* cx is number of nulls to pad */
  29.  
  30.    asm repz stosb;        /* pad with nulls */
  31.  
  32.    _AX = (unsigned) dest;    /* return destination */
  33. }